Skip to content

0.11.0: prompt version 9, the peak diagnosis and a sealed holdout - #12

Merged
AddisonTech merged 5 commits into
mainfrom
release-0.11.0
Oct 24, 2026
Merged

AddisonTech merged 5 commits into
mainfrom
release-0.11.0

Conversation

@AddisonTech

Copy link
Copy Markdown
Owner

0.11.0: close the peak gap and August ramping between the 0.10.0 live agent and its strategy, and set up a clean holdout before any tuning. The envelope is unchanged from 0.10.0. No live model calls were made; everything is measured on recorded runs and offline controllers.

Holdout, chosen and sealed first (HOLDOUT.md, its own commit before any tuning)

CityLearn v3.0.2 ships no dataset that is both new to this project and fully compatible with it: every 2023 set reuses the phase 2 or tuning data (phase 3's Buildings 1 to 3, weather, tariff and carbon are the tuning months value for value), and every other dataset has other actions or observations. The closest option, proposed as such: Buildings 4, 5 and 6 of citylearn_challenge_2023_phase_3_1, June, July and August (holdout-06/07/08). The buildings, LSTM models, batteries and heat pumps are new; the weather, tariff and carbon are the tuning months'. hyperbolic months and compare refuse it without --holdout-final, the files are checked against a seal of hashes, and only the baseline was run on it (load check).

Acceptance rule, committed before any v9 result: on the four-month mean, v9 scripted must lower the all-time peak and ramping against v8 scripted, stay within 0.001 on cost, emissions, discomfort and too warm, and not raise outage energy.

Peak diagnosis (scripts/analyze_peaks.py, four 0.10.0 live months, each class put back to the strategy through the unchanged envelope; control replays reproduce the published KPIs exactly)

KPI points explained, sum of four months All-time peak Daily peak Ramping
Skipped shaves (35 building-hours) +0.0555 +0.0120 +0.0155
Missed trim starts (416) 0.0000 +0.0126 -0.0212
Skipped charges (82) 0.0000 +0.0026 +0.0311
  • The July (day 31, 8 pm) and August (day 19, 7 pm) all-time peaks are evening hours after the top-price discharge where Haiku left the batteries idle and the strategy shaved. Skipped shaves put back take August from 0.8940 to the strategy's 0.8570 and July from 0.8822 to 0.8637. The v8 prompt said "Before them discharge only to shave" and "Idle on flat_24h days".
  • 415 of 416 missed trim starts are null with the trim state off.

August ramping split (points above 1.0): scripted v8 +1.00 (mostly trim ends, +3.91, which the envelope fixes), Haiku +1.57. Strategy 1.00, agent +0.57 (battery +1.25, less 0.69 from trims it did not start).

Search and result (scripts/tune_strategy.py --version 9, four months, the rule as written)

  • First pass, 36 settings (evening reserve 0 to 0.25, shave 0.9 or 0.8, charge rise 0.15 to 0.05): none passed; the reserve cuts the peak but costs about 0.003 per 0.05.
  • Second, finer pass of 8, added after the first and reported as such: one passed, evening_reserve 0.01. v9 passes the acceptance rule: all-time peak 0.8768 against 0.8797, ramping 0.9857 against 0.9873, cost +0.0006, emissions +0.00002, discomfort, too warm and outage energy unchanged.

Prompt version 9 (default): the v9 strategy, peak.shave_now, "send every number exactly" (a -0.033 shave is not 0, cooling under baseline is not null with the trim off), shave whenever shave_now, after the top price and on flat days too. Version 8 stays selectable and byte for byte.

Estimates, four-month mean, no holdout (scripted rows are not model results)

cost emissions discomfort too warm ramping daily peak all-time peak outage
0.4.0 rule-based 0.9619 1.0002 0.1352 0.0188 1.0955 0.9847 0.9846 0.1711
v8 scripted 0.9087 0.9582 0.0208 0.0059 0.9873 0.8910 0.8797 0.1711
v9 scripted 0.9093 0.9582 0.0208 0.0059 0.9857 0.8898 0.8768 0.1711
Haiku v8 live (0.10.0) 0.9122 0.9609 0.0241 0.0066 0.9918 0.8958 0.8975 0.1711
Haiku v8, skipped shaves put back 0.9123 0.9608 0.0241 0.0066 0.9879 0.8928 0.8836 0.1711

Request size and cost: v9 requests average 9,716 characters against 9,456 for v8 (2.8 percent larger). A Haiku month should cost about $0.42 to $0.44 (worst case $0.96 to $0.99, under the $2.00 cap).

hyperbolic/envelope.py is byte for byte 0.10.0's. The four 0.10.0, the 0.9.0 and the 0.8.0 live months replay every hour with 0 API calls.

Tests: 319 passed locally (CI skips the 6 that need the live runs kept in runs/). Repo checks passed.

@AddisonTech
AddisonTech merged commit 5a684ab into main Oct 24, 2026
6 checks passed
@AddisonTech
AddisonTech deleted the release-0.11.0 branch October 24, 2026 20:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant